package com.sjd.mall.mapper;

import com.sjd.mall.domain.SjdGoodsDO;
import com.sjd.mall.domain.dto.goods.SjdWebSiteGoodsQueryResponseDTO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author s
 */
public interface SjdGoodsMapper {
    /**
     * deleteByPrimaryKey
     *
     * @param id id
     * @return return
     */
    int deleteByPrimaryKey(Long id);

    /**
     * insert
     *
     * @param record record
     * @return return
     */
    int insert(SjdGoodsDO record);

    /**
     * insertSelective
     *
     * @param record record
     * @return return
     */
    int insertSelective(SjdGoodsDO record);

    /**
     * selectByPrimaryKey
     *
     * @param id id
     * @return return
     */
    SjdGoodsDO selectByPrimaryKey(Long id);

    /**
     * updateByPrimaryKeySelective
     *
     * @param record record
     * @return return
     */
    int updateByPrimaryKeySelective(SjdGoodsDO record);

    /**
     * updateByPrimaryKey
     *
     * @param record record
     * @return return
     */
    int updateByPrimaryKey(SjdGoodsDO record);

    /**
     * 获取所有在线的商品
     *
     * @return
     */
    List<SjdGoodsDO> selectAllOnlineGoods();

    /**
     * 更新库存数量
     *
     * @param goodsId   goodsId
     * @param changeNum 库存变化变化数
     * @return return
     */
    int updateStorage(@Param("goodsId") Long goodsId, @Param("changeNum") BigDecimal changeNum);

    /**
     * 查询商品 小程序
     *
     * @param goodsId     goodsId
     * @param goodsName   goodsName
     * @param goodsTypeId goodsTypeId
     * @param isOnline    isOnline
     * @param isCanRefund isCanRefund
     * @param typeClass t
     * @return return
     */
    List<SjdGoodsDO> queryGoodsApp(@Param("goodsId") Long goodsId, @Param("goodsName") String goodsName,
                                   @Param("goodsTypeId") Long goodsTypeId, @Param("isOnline") Boolean isOnline,
                                   @Param("isCanRefund") Boolean isCanRefund, @Param("typeClass") Integer typeClass);

    /**
     * 查询商品 管理平台
     *
     * @param goodsId     goodsId
     * @param goodsName   goodsName
     * @param goodsTypeId goodsTypeId
     * @param isOnline    isOnline
     * @param isCanRefund isCanRefund
     * @param typeClass t
     * @return return
     */
    List<SjdWebSiteGoodsQueryResponseDTO> queryGoodsWebSite(@Param("goodsId") Long goodsId, @Param("goodsName") String goodsName,
                                                            @Param("goodsTypeId") Long goodsTypeId, @Param("isOnline") Boolean isOnline,
                                                            @Param("isCanRefund") Boolean isCanRefund, @Param("typeClass") Integer typeClass);

    /**
     * 清空数据库所有banner
     */
    void clearAllBanner();

    /**
     * 设置在banner中的商品
     * @return return
     */
    List<SjdGoodsDO> getIsBannerGoods();
}